home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / nihcl-30.lha / nihcl-3.0 / lib / nihclconfig.h < prev    next >
C/C++ Source or Header  |  1990-05-22  |  9KB  |  283 lines

  1. #ifndef    NIHCLCONFIG_H
  2. #define    NIHCLCONFIG_H
  3.  
  4. /*$Header: /afs/alw.nih.gov/unix/sun4_40c/usr/local/src/nihcl-3.0/share/lib/RCS/nihclconfig.h,v 3.0 90/05/22 08:58:56 kgorlen Rel $*/
  5.  
  6. /* nihclconfig.h -- NIHCL configuration file
  7.  
  8.     THIS SOFTWARE FITS THE DESCRIPTION IN THE U.S. COPYRIGHT ACT OF A
  9.     "UNITED STATES GOVERNMENT WORK".  IT WAS WRITTEN AS A PART OF THE
  10.     AUTHOR'S OFFICIAL DUTIES AS A GOVERNMENT EMPLOYEE.  THIS MEANS IT
  11.     CANNOT BE COPYRIGHTED.  THIS SOFTWARE IS FREELY AVAILABLE TO THE
  12.     PUBLIC FOR USE WITHOUT A COPYRIGHT NOTICE, AND THERE ARE NO
  13.     RESTRICTIONS ON ITS USE, NOW OR SUBSEQUENTLY.
  14.  
  15. Author:
  16.     K. E. Gorlen
  17.     Computer Systems Laboratory, DCRT
  18.     National Institutes of Health
  19.     Bethesda, MD 20892
  20.  
  21. $Log:    nihclconfig.h,v $
  22.  * Revision 3.0  90/05/22  08:58:56  kgorlen
  23.  * Release for 1st edition.
  24.  * 
  25. */
  26.  
  27. // nihclconfig.h -- NIHCL configuration file
  28.  
  29. #include <signal.h>
  30. #include <setjmp.h>
  31.  
  32. #ifdef u3b
  33. #define att3b
  34. #endif
  35. #ifdef u3b2
  36. #define att3b
  37. #endif
  38. #ifdef u3b5
  39. #define att3b
  40. #endif
  41. #ifdef u3b15
  42. #define att3b
  43. #endif
  44.  
  45. /* Machine Model Implementation Status:
  46.  
  47.     sun/UCB42BSD        implemented and tested
  48. */
  49.  
  50. // Operating System (only one can be defined)
  51.  
  52. //#define SYSVR2
  53. //#define SYSVR3
  54. //#define UCB42BSD
  55. //#define UCB43BSD
  56.  
  57. #if defined(att3b)
  58. #define SYSVR3
  59. #endif
  60.  
  61. #if defined(hpux)
  62. #define SYSVR3
  63. #endif
  64.  
  65. #ifdef mc300
  66. // default att universe on MASSCOMP
  67. #define SYSV
  68. // ucb universe on MASSCOMP
  69. //#define UCB42BSD
  70. #endif
  71.  
  72. #ifdef ibm032
  73. // default AOS 4.3 on RT PC
  74. #define UCB43BSD
  75. // AIX on RT PC
  76. //#define SYSVR2
  77. #endif
  78.  
  79. #if defined(vax)
  80. #define UCB42BSD
  81. #endif
  82.  
  83. #if defined(sun)
  84.  
  85. #include <sys/types.h>
  86. #ifndef howmany
  87. #define UCB42BSD
  88. #define SUNOS3
  89. #else
  90. #define UCB43BSD
  91. #define SUNOS4
  92. #endif
  93.  
  94. #endif
  95.  
  96. #if defined(SYSVR2) || defined(SYSVR3)
  97. #define    SYSV
  98. #endif
  99.  
  100. #if defined(UCB42BSD) || defined(UCB43BSD)
  101. #ifndef BSD
  102. #define BSD
  103. #endif
  104. #endif
  105.  
  106. inline unsigned mod_sizeof_short(unsigned i)    {
  107.   return sizeof(short)&sizeof(short)-1 ? i%sizeof(short) : i&sizeof(short)-1; }
  108. inline unsigned mod_sizeof_int(unsigned i)    {
  109.   return sizeof(int)&sizeof(int)-1 ? i%sizeof(int) : i&sizeof(int)-1; }
  110. inline unsigned mod_sizeof_long(unsigned i)    {
  111.   return sizeof(long)&sizeof(long)-1 ? i%sizeof(long) : i&sizeof(long)-1; }
  112. inline unsigned mod_sizeof_float(unsigned i)    {
  113.   return sizeof(float)&sizeof(float)-1 ? i%sizeof(float) : i&sizeof(float)-1; }
  114. inline unsigned mod_sizeof_double(unsigned i)    {
  115.   return sizeof(double)&sizeof(double)-1 ? i%sizeof(double) : i&sizeof(double)-1; }
  116. inline unsigned mod_sizeof_ptr(unsigned i)    {
  117.   return sizeof(void*)&sizeof(void*)-1 ? i%sizeof(void*) : i&sizeof(void*)-1; }
  118.  
  119. #if defined(att3b) || defined(mc300) || defined(ibm032) || defined(sun) || defined(vax) || defined(i386) || defined(hpux)
  120.  
  121. inline unsigned div_bitsize_char(unsigned i)    { return i >> 3; }
  122. inline unsigned mod_bitsize_char(unsigned i)    { return i & 7; }
  123. inline unsigned div_bitsize_int(unsigned i)    { return i >> 5; }
  124. inline unsigned mod_bitsize_int(unsigned i)    { return i & 0x1f; }
  125. inline unsigned div_sizeof_short(unsigned i)    { return i >> 1; }
  126. inline unsigned div_sizeof_int(unsigned i)    { return i >> 2; }
  127. inline unsigned div_sizeof_long(unsigned i)    { return i >> 2; }
  128. inline unsigned div_sizeof_float(unsigned i)    { return i >> 2; }
  129. inline unsigned div_sizeof_double(unsigned i)    { return i >> 3; }
  130. inline unsigned div_sizeof_ptr(unsigned i)    { return i >> 2; }
  131.  
  132. const int UNINITIALIZED    =0xa5a5a5a5;    // data value to flag uninitialized variables 
  133.  
  134. #endif
  135.  
  136. #if defined(att3b) || defined(mc300) || defined(vax) || defined(ibm032) || defined(sun) || defined(i386)
  137.  
  138. #define STACK_GROWS_DOWN 1
  139.  
  140. #endif
  141.  
  142. #if defined(BSD) || defined(mc300) || defined(hpux)
  143. // defined if select(2) implemented
  144. #define HAVE_SELECT
  145. #endif
  146.  
  147. // defines for interfacing with ASTs or signals
  148.  
  149. #if defined(mc300)
  150.  
  151. #ifndef DEBUG_PROCESS
  152. #define    AST_DISABLE    int prior_AST_state = (Scheduler::astActive()? 127 : setpri(127))
  153. #else
  154. #define    AST_DISABLE    int prior_AST_state = (Scheduler::astActive()? 0 : setpri(0))
  155. #endif
  156.  
  157. #define AST_ENABLE    if (!Scheduler::astActive()) setpri(prior_AST_state)
  158. #define    AST_STATE    setpri(-1)
  159. #define AST_SAVE(m)    m = prior_AST_state
  160. #define AST_RESTORE(m)    setpri(m)
  161. #define AST_PAUSE    astpause(0,1000)
  162.  
  163. #else
  164. #if defined(BSD) || defined(hpux)
  165.  
  166. #ifndef DEBUG_PROCESS
  167. #define    AST_DISABLE    int prior_AST_state = (Scheduler::astActive()? 0xFFFFFFFF : sigblock(0xFFFFFFFF))
  168. #else
  169. #define AST_DISABLE    int prior_AST_state = (Scheduler::astActive()? 0x0 : sigblock(0x0))
  170. #endif
  171.  
  172. #define AST_ENABLE    if (!Scheduler::astActive()) sigsetmask(prior_AST_state)
  173. #define    AST_STATE    sigblock(0)
  174. #define AST_SAVE(m)    m = prior_AST_state
  175. #define    AST_RESTORE(m)    sigsetmask(m)
  176. #define    AST_PAUSE    sigpause(0)
  177.  
  178. #endif    BSD
  179.  
  180. #if defined(SYSVR2)
  181.  
  182. // Signals do not queue under System V R2, so they are unusable
  183.  
  184. #define    AST_DISABLE
  185. #define AST_ENABLE
  186. #define    AST_STATE    0
  187. #define AST_SAVE(m)
  188. #define    AST_RESTORE(m)
  189. #define    AST_PAUSE
  190.  
  191. #endif    SYSVR2
  192. #endif    mc300
  193.  
  194. // setjmp()/longjmp() context switching for Processes -- see HeapProc.c
  195. //  for additional machine-dependent code.
  196.  
  197. #if defined(ibm032) && defined(UCB43BSD)
  198. typedef jmp_buf JMP_BUF;
  199. inline int SETJMP(JMP_BUF env)            { return setjmp(env); }
  200. inline void LONGJMP(JMP_BUF env, int val)    { longjmp(env,val); }
  201. inline int _SETJMP(JMP_BUF env)            { return _setjmp(env); }
  202. inline void _LONGJMP(JMP_BUF env, int val)    { _longjmp(env,val); }
  203. inline unsigned& ENV_PC(JMP_BUF env)        { return (unsigned&)env[10]; }
  204. inline unsigned& ENV_SP(JMP_BUF env)        { return (unsigned&)env[0]; }
  205. inline unsigned& ENV_FP(JMP_BUF env)        { return (unsigned&)env[0]; }    // register used for FP varies
  206. #endif
  207.  
  208. #if defined(sun)
  209.  
  210. #ifdef SUNOS3
  211. typedef jmp_buf JMP_BUF;
  212. inline int SETJMP(JMP_BUF env)            { return setjmp(env); }
  213. inline void LONGJMP(JMP_BUF env, int val)    { longjmp(env,val); }
  214. inline int _SETJMP(JMP_BUF env)            { return setjmp(env); }
  215. inline void _LONGJMP(JMP_BUF env, int val)    { longjmp(env,val); }
  216. inline unsigned& ENV_PC(JMP_BUF env)        { return (unsigned&)env[0]; }
  217. inline unsigned& ENV_SP(JMP_BUF env)        { return (unsigned&)env[14]; }
  218. inline unsigned& ENV_FP(JMP_BUF env)        { return (unsigned&)env[13]; }
  219. #endif
  220.  
  221. #ifdef SUNOS4
  222.  
  223. #ifdef mc68000
  224. typedef jmp_buf JMP_BUF;
  225. inline int SETJMP(JMP_BUF env)            { return setjmp(env); }
  226. inline void LONGJMP(JMP_BUF env, int val)    { longjmp(env,val); }
  227. inline int _SETJMP(JMP_BUF env)            { return _setjmp(env); }
  228. inline void _LONGJMP(JMP_BUF env, int val)    { _longjmp(env,val); }
  229. inline unsigned& ENV_PC(JMP_BUF    env)        { return (unsigned&)env[3]; }
  230. inline unsigned& ENV_SP(JMP_BUF    env)        { return (unsigned&)env[2]; }
  231. inline unsigned& ENV_FP(JMP_BUF    env)        { return (unsigned&)env[15]; }
  232. #endif
  233.  
  234. #ifdef sparc
  235. typedef jmp_buf JMP_BUF;
  236. inline int SETJMP(JMP_BUF env)            { return setjmp(env); }
  237. inline void LONGJMP(JMP_BUF env, int val)    { longjmp(env,val); }
  238. inline int _SETJMP(JMP_BUF env)            { return _setjmp(env); }
  239. inline void _LONGJMP(JMP_BUF env, int val)    { _longjmp(env,val); }
  240. inline unsigned& ENV_PC(JMP_BUF    env)        { return (unsigned&)env[3]; }
  241. inline unsigned& ENV_SP(JMP_BUF    env)        { return (unsigned&)env[2]; }
  242. inline unsigned& ENV_FP(JMP_BUF    env)        { return ((unsigned*)ENV_SP(env))[14]; }
  243. #endif
  244.  
  245. #ifdef i386
  246. NOT YET IMPLEMENTED
  247. #endif
  248.  
  249. #endif
  250. #endif
  251.  
  252. #if defined(mc300)
  253. #ifdef SYSV
  254. struct JMP_BUF {
  255.     jmp_buf jbuf;
  256.     long sigmask;
  257. };
  258. inline int SETJMP(JMP_BUF& env)            { env.sigmask = AST_STATE; return setjmp(env.jbuf); }
  259. inline void LONGJMP(JMP_BUF& env, int val)    { AST_RESTORE(env.sigmask); longjmp(env.jbuf,val); }
  260. inline int _SETJMP(JMP_BUF& env)        { return setjmp(env.jbuf); }
  261. inline void _LONGJMP(JMP_BUF& env, int val)    { longjmp(env.jbuf,val); }
  262. inline unsigned& ENV_PC(JMP_BUF& env)        { return (unsigned&)env.jbuf[0]; }
  263. inline unsigned& ENV_SP(JMP_BUF& env)        { return (unsigned&)env.jbuf[12]; }
  264. inline unsigned& ENV_FP(JMP_BUF& env)        { return (unsigned&)env.jbuf[11]; }
  265. #endif
  266. #ifdef UCB42BSD
  267. typedef jmp_buf JMP_BUF;
  268. inline int SETJMP(JMP_BUF env)            { return setjmp(env); }
  269. inline void LONGJMP(JMP_BUF env, int val)    { longjmp(env,val); }
  270. inline int _SETJMP(JMP_BUF env)            { return _setjmp(env); }
  271. inline void _LONGJMP(JMP_BUF env, int val)    { _longjmp(env,val); }
  272. inline unsigned& ENV_PC(JMP_BUF env)        { return (unsigned&)env[0]; }
  273. inline unsigned& ENV_SP(JMP_BUF env)        { return (unsigned&)env[12]; }
  274. inline unsigned& ENV_FP(JMP_BUF env)        { return (unsigned&)env[11]; }
  275. #endif
  276. #endif
  277.  
  278. inline unsigned ENV_PC(const JMP_BUF& env)    { return ENV_PC((JMP_BUF)env); }
  279. inline unsigned ENV_SP(const JMP_BUF& env)    { return ENV_SP((JMP_BUF)env); }
  280. inline unsigned ENV_FP(const JMP_BUF& env)    { return ENV_FP((JMP_BUF)env); }
  281.  
  282. #endif
  283.